#include"reserve_area.h"

_FILE* _fopen(const char* filename , const char* mode)
{
    _FILE* pf=(_FILE*)malloc(sizeof(_FILE));
    assert(pf);
    //简单写，默认行刷新
    pf->flags=SYNC_LINE;
    pf->size=0;
    pf->capacity=MAX_SIZE;
    memset(pf->buf,0,MAX_SIZE);
    //打开方式
    if(*mode=='r')
    {
        pf->fd=open(filename,O_RDONLY);
    }
    else if(*mode=='w')
    {
        pf->fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0666);
    }
    else if(*mode== 'a')
    {
        pf->fd=open(filename,O_WRONLY|O_CREAT|O_APPEND,0666);
    }
    else
    {
        //...
    }
    printf("打开成功\n");
    return pf;

}

  


int _fwrite(void*ptr ,size_t size,size_t num,_FILE*pf)
{
    //返回值（能够写入的数据个数）
    int ret=num;

   //判断能否全部写入
   if(pf->size + size*num > pf->capacity)
   {
        ret=(pf->capacity - pf->size)/size;
   }
    //将数据写入到缓冲区
    memcpy(pf->buf+pf->size,ptr,ret*size);
    pf->size+=(ret*size);

    printf("ret:%d size:%d\n",ret,pf->size);
    //判断是否需要刷新
    switch(pf->flags)
    {
    case SYNC_NOW:
        //....
        break;
    case SYNC_FULL:
        //....
        break;
    case SYNC_LINE:
        {
            if(*(pf->buf+size-1)=='\n')
            _fflush(pf);
            break;
        }
    default:
        break;
    }
    printf("写入成功\n");
    return ret;
}
void _fclose(_FILE* pf)
{
    _fflush(pf);
    free(pf);
}
void _fflush(_FILE*pf)
{
    write(pf->fd,pf->buf,pf->size);
    memset(pf->buf,0,pf->size);
    //从内核刷新到外设
    fsync(pf->fd);
    pf->size=0;
    printf("刷新成功\n");
}


